Search index format optimizations

ABSTRACT

A search index structure which extends a typical composite index by incorporating an index which is optimized for fast retrieval from storage and which eliminates data which is specific to phrase searching. Other data is represented in a manner which allows it to be calculated rather than stored. Associating variable length entries with logical categories allows their length to be inferred from the category rather than stored. Using delta values between document IDs rather than the ID itself generates a compact, dense symbol set which is efficiently compressed by Huffman encoding or a similar compression method. Using an upper threshold to remove large, and thus rare, delta values from the symbol set prior to encoding further improves the encoding performance.

BACKGROUND

Searching for keywords or similar data items within a search domain madeup of a number of documents typically involves the use of an index.Often, this is an inverted index which associates keywords withdocuments.

Where the search index is general purpose in nature, it must support avariety of types of searches. One common example is a keyword searchwhere the user supplies one or more keywords, or values, and the searchresult is all documents within the search domain which contain all ofthe keywords. Another example is a phrase search where the user suppliesa phrase made up of two or more words in a specified order. The searchresult in this case is all documents from the search domain whichcontain the phrase exactly as supplied (i.e., all words adjacent and inthe same order). An index which supports phrase queries must containsignificantly more data than one which does not because it must includethe position within the document of every occurrence of the word.

In order to meet the user's needs, searching must be both fast andaccurate. At the index level this levies competing requirements. Theindex must be complete in order to be accurate, but this drives a needfor a larger index. The index must be small in order to be accessedquickly, but this drives a need to eliminate data. Compression schemescan be used to reduce the amount of data which must be read in, but thismay not be sufficient to meet the user's need for quick results.

SUMMARY

This Summary is provided to introduce in a simplified form a selectionof concepts that are further described below in the DetailedDescription. This Summary is not intended to identify key features oressential features of the claimed subject matter, nor is it intended tobe used to limit the scope of the claimed subject matter.

Various aspects of the subject matter disclosed herein are related to asearch index structure in which an extension to the pre-existingstructure is used to optimize non-phrase searches. This optimizationincludes the elimination of information about the location of keywordoccurrences within the document.

Other aspects relate to the elimination of data by structuring the indexin such a way that it can be calculated rather than stored. Associatingvariable length occurrence count fields with logical categories allowsthe size of the field to be inferred from the category rather thanstored. Using continuous symbols values within, and across categoriesallows the symbol vales to be calculated rather than stored in thecategory. Ordering the symbol entries within the categories, andmatching that ordering in the encoding table allows the symbol whichcorresponds to a code to be calculated rather than stored.

The approach described below may be implemented as a computer process, acomputing system or as an article of manufacture such as a computerprogram product. The computer program product may be computer storagemedium readable by a computer system and encoding a computer program ofinstructions for executing a computer process. The computer programproduct may also be a propagated signal on a carrier readable by acomputing system and encoding a computer program of instructions forexecuting a computer process.

A more complete appreciation of the above summary can be obtained byreference to the accompanying drawings, which are briefly summarizedbelow, to the following detailed description of present embodiments, andto the appended claims.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

FIG. 1 illustrates an embodiment of a structure of a composite searchindex.

FIG. 2 shows the high level logical flow of an embodiment of a method toperform a multiword, non-phrase, query.

FIG. 3 shows the high level logical flow of an embodiment of a method toperform a phrase query.

FIG. 4 illustrates an embodiment of a top level structure of a contentindex extension.

FIG. 5 illustrates an embodiment of a structure for a compression tablepage.

FIG. 6 illustrates an embodiment of a structure for a categorydescriptor.

FIG. 7 illustrates an embodiment of a structure for a data page.

FIG. 8 illustrates an embodiment of a structure for a page directoryentry.

FIG. 9 illustrates an embodiment of a structure for a document IDbitstream entry.

FIG. 10 shows the general flow of the compression process.

FIG. 11 shows the general flow of the decompression process.

DETAILED DESCRIPTION

This detailed description is made with reference to the accompanyingdrawings, which form a part hereof, and which show, by way ofillustration, specific embodiments. These embodiments are described insufficient detail to enable those skilled in the art to practice what istaught below, and it is to be understood that other embodiments may beutilized and that logical, mechanical, electrical, and other changes maybe made without departing from the spirit or scope of the subjectmatter. The following detailed description is, therefore, not to betaken in a limiting sense, and its scope is defined only by the appendedclaims.

Overview

The present disclosure addresses searching a set of documents (or files)within a search domain to find those most relevant to the user.Searching typically involves obtaining a set of keywords from the userto direct the search and then identifying all documents within thesearch domain which match those keywords. In attempting to identifythese candidate documents, the search engine may look for the keywordswithin the body of the document or within specific sections, orproperties, of the document (e.g., title, abstract, etc).

The resulting set of candidate documents contains all documents from thesearch domain which may be relevant. A ranking algorithm may then beapplied to the candidate documents to predict the relevance of thedocuments to the user. The candidate documents are then typicallypresented to the user in decreasing order of predicted relevance.

Embodiments of this type of searching typically utilize an invertedindex structure which associates keywords with documents. Referring toFIG. 1 it can be seen that such an index 100 may consist of severalcomponents. Of primary interest to the present disclosure are thecontent index 102 and content index extension 106. While important tothe overall searching process, the basic scope index 104 and compoundscope index 108 are not directly relevant to the present disclosure.

The content index 102 is a complete index of the keywords found indocuments in the search domain. It is structured to support a variety oftypes of searches and can be used independently of the content indexextension 106. A flag within the content index 102 indicates whetherthere is information available for use in the content index extension106. This flag is present for each keyword, providing control over howand when the extended information is used.

One type of search which the content index 102 supports is a “phrase”query. This is a query where the user is looking for a specificcombination of words appearing in a specific order. A simple example isa search for the phrase “the quick brown fox.” A document is a candidateif it contains that exact phrase, but not if it contains all of thewords, scattered throughout the document or in a different order. Forefficiency, this type of query requires that the index containinformation about where each keyword appears within the document so thatthe search engine can determine whether they are adjacent and in theproper order. This information increases the size of the index and thusthe amount of data which must be read in from the storage medium (e.g.,disk drive) containing the index. For large search domains in which oneor more of the supplied keywords appears in a high percentage of thedocuments, the time required to read in this data comprises asignificant portion of the time required to perform the search.

The content index extension 106 is optimized for non-phrase queriesinvolving keywords which appear in large number of documents. One use isfor situations where the user supplies a set of keywords, all of whichmust appear in each candidate document, but not necessarily in anyparticular order. Another use is as an initial filter for a phrasequery, weeding out those documents which do not contain all of the wordsprior to using the content index 102 to perform the more costlydetermination of whether the specific phrase is contained within theremaining documents.

Because the content index extension 106 does not need to support phrasequeries, it does not need to contain information about the specificlocation(s) at which each keyword appears within each document (referredto as occurrence data). At most, it will store a count of how many timesthe word occurs, an Occurrence Count. This single value is far smallerthan the set of numbers needed to represent each location within adocument, especially where the word is widely used in the document. Theelimination of this data reduces the amount of data which must be readfrom storage for each keyword. This decreases the time required toprocess each keyword, speeding up the search.

For the simplicity and clarity in the present disclosure the index willbe described as consisting of separate files for each of the components.Clearly, the use of files is only one embodiment and is not intended asa limitation of the disclosure. The index is also described in terms of“keywords” which exist within “documents.” The keyword is not restrictedto be a “word.” It could be a phrase, number, code, or any similar valueto be searched for within the documents. In a similar manner, the term“document” will be used to refer to those entities which are beingsearched and which contain the keywords. They may be documents, files,cards, or any other logical structure having the requisitecharacteristics.

To further reduce the amount of data which needs to be read fromstorage, portions of the content index extension 106 are compressed asdescribed below. One embodiment utilizes Huffman encoding which is alossless entropy encoding scheme having the characteristic of usingshorter codes for the more frequently occurring data items. Where thecoding is applied to the differences (or step sizes) between documentIDs, the compression becomes more efficient as the frequency ofoccurrence of the keyword within the search domain increases. This is agood match to the disclosed approach where the content index extensionis only used for commonly used keywords.

The content index extension 106 can be used in many ways in support ofkeyword searching. One use is illustrated in FIG. 2 which shows the highlevel logical flow of a multiword, non-phrase, query. The keywords areobtained from the user at step 200. Loop decision 202 controls theprocessing of each keyword. Within this loop, each keyword at step 204is separately looked up in the content index 102 to determine if acontent index extension (“CIX”) is available for the keyword. This canbe done without reading in the large amount of occurrence data becausethe requisite data can be stored within the header information for thekeyword. If the flag is set within the content index 102 it will beaccompanied by an offset into the content index extension 106 where theword is located. This allows the relevant information to be accesseddirectly. The indexing information from the content index extension 106is then used to determine the list of documents which contain thecurrent word at step 208. If there is not a content index extension 106entry available, the list of candidate documents will be generated usingthe occurrence data in the content index 102 at step 206. After the listof candidate documents is obtained for each keyword individually, theintersection of these lists will be formed 210 generating a single listof all documents in which all of the keywords appear. This is the searchresult which will be made available to the user.

A second use is illustrated in FIG. 3 which illustrates the high levelsteps which can be used to perform a phrase query. Steps 300, 302, 304,and 308 are the same as Steps 200, 202, 204, and 208 discussed abovewith respect to FIG. 2. The processing within the loop differs in thatwhen there is no content index extension 106 available for use with akeyword, it is skipped rather than generating a list using the contentindex 104. This is because the processing within the loop is acting as afilter and not generating a final answer. When searching for a phrase,it is only necessary to check for the phrase for those files in whichall of the keywords occur. This set of files is necessarily a subset ofthose files in which any combination of the keywords appears. While itis desirable to develop a candidate list for all of the keywords priorto forming the intersection, it is not necessary. Even filtering on asingle word can reduce the overhead sufficiently to speed up the search.After the intersection is formed 310 of all of the candidate documentlists, the remaining documents are processed 312 using the content index104 to determine which, if any, contain the exact phrase. That list isthe search result which will be made available to the user.

Content Index Extension Structure

Referring to FIG. 4 the top level structure of the content indexextension 106 can be seen. There is a separate segment 400 for eachkeyword in the index. In one embodiment, each segment starts on a 4096byte page boundary. The segment can then span as many pages as necessaryto hold the data. Within each keyword segment, there are two distinctsets of data. Beginning at the initial page boundary is the CompressionTable Page, 402. After this, starting at the next page boundary is aseries of one or more Data Pages, 404. Note that page alignment is notrequired to implement the concepts of the present disclosure but mayoffer improved performance.

An embodiment of the present disclosure encodes the data for each wordseparately. This approach enables the use of a separate Encoding Table504 (See FIG. 5) for each set of keyword data, optimizing thecompression within each keyword. In order to decompress the data,decoding information must be available for each keyword. One embodimentstores the Encoding Table 504 with the keyword as part of theCompression Table Page. This is done because the required decoding tablecan be derived from the Encoding Table 504 and the Encoding Table 504 issmaller, saving storage space. Once the decoding table is generated, theData Pages 404 can be decompressed and used.

FIG. 5 illustrates the structure of the Compression Table Page 402. Thisstructure can best be understood by also referencing the Data Page 404as illustrated in FIG. 7. At a high level, the data stored for eachkeyword is a series of references to documents containing the keyword.For each document, two items of information are needed: the document ID(DocID) and an Occurrence Count (OccurCnt) of the number of times thekeyword appears in the document. These are stored in separate sectionsof the data page, the DocID Bitstream 708 and the OccurCnt Bitstream710. This is due in part to the fact that the occurrence data is notalways used and storing it separately means that it does not have to beretrieved with the DocID. Both of these items of information are encodedusing the Compression Table Page 402 but in different manners.

OccurCnts are stored in the OccurCnt Bitstream 710 as a series ofvariable length bit fields. OccurCnt values can vary widely acrossdocuments. Because of this, the number of bits required to store theOccurCnt also varies. In one embodiment, a fixed number of differentsizes are used to store the OccurCnt. For example, the field may be oneof 0, 3, 7, 12, or 20 bits in length. As a result, each document willhave an OccurCnt which is stored in a field having one of these finitenumbers of lengths. Using this attribute, the documents can then begrouped by the length of their corresponding OccurCnt. In theCompression Table Page 402 these groups are termed Categories and eachis represented by a Category Descriptor 502. Because all documents in aparticular Category have the same OccurCnt field length, that lengthonly needs to be stored once, as the Bits In Occurrence field 606 in theCategory Descriptor 502 rather than with each DocID. This eliminates asignificant amount of redundant data from the Content Index Extension106. A value of 0 for Bits In Occurrence is used to indicate that theOccurCnt value is the same as for the previous DocID. There are noentries in the OccurCnt Bitstream 710 for these entries. The firstcategory contains all DocID Deltas which have this characteristic.

FIG. 6 illustrates an embodiment of the category descriptor 502. SymbolCount 602 specifies the number of Symbols in the Category. DocID DeltaThreshold 604 specifies the upper limit on DocID Deltas that will beencoded within the category. Bits In Occurrence 606 specifies the numberof bits used to store each OccurCnt entry in the OccurCnt Bitstream 710that corresponds to a Symbol in the Category. The Base Symbol Value 608(“BSV”) defines the value which is added to each DocID Delta value tomake it unique to this Category.

Each Symbol used in a Category is the sum of a DocID Delta and the BSVfor that Category. The DocID Delta values for each Category range fromzero (0) to (DocID Threshold −1). The BSV for the first Category is zero(0) and the BSV for all other Categories is equal to the BSV of theprevious category plus the number of symbols in the category. As aresult the full set of Symbols represented by all of the Categories is acontinuous series from the smallest DocID Delta (0) to the BSV of thelast Category plus the largest encoded DocID Delta. Within this series,the set of distinct DocID Deltas repeats in each Category, encoded as adifferent Symbol by using a different BSV. This approach results in eachDocID Delta value appearing in each Category, thus being paired witheach available value for Bits In Occurrence.

An embodiment also uses sequential DocID Delta values within eachCategory. Each Category will contain the same series of values. Thisallows the DocID Delta value to be calculated from the Symbol and theCategory Descriptors. The value of the Symbol serves as an index intothe series of DocID deltas represented by the Categories. Which Categoryit falls into determines the corresponding Bits In Occurrence value andthe BSV for the Category. Subtracting the BSV from the Symbol determinesthe DocID Delta value. Because the ordering defines the Symbol values ineach category, it is not necessary to store the symbols. Rather, aSymbol value can be calculated as needed. Other fixed ordering of valueswithin the Categories could also be used to achieve the same result.

Within the Encoding Table 504 the Codes are stored in ordercorresponding to the entries in the Category Descriptors 502. The numberof entries in the Encoding Table 504 is equal to the total number ofentries in all of the Categories combined. This correspondence allows aCode to be mapped to a Symbol by using the Code's index in the EncodingTable 504 to index into the Categories. This enables direct calculationof a DocID Delta or the generation of a decoding table from the Categorydefinitions and the Encoding Table 504. Because the decoding can beperformed in this manner, discrete Symbol values do not need to bestored in the Encoding Table 504 along with the Codes as would betypical for a Huffman encoding scheme.

One of the concepts of the present disclosure is that the occurrenceinformation within the Content Index Extension 106 does not contain anydata about where the keyword occurs in the associated document. The onlydata is the number of times that the keyword occurs in the document.This occurrence count data supports queries which use a relevanceranking algorithm which differentiates candidate documents based on howoften the word appears. This can be done with much less data than wouldbe required for phrase queries which the Content Index Extension 106 ofthe present disclosure specifically does not support. Another concept ofthe present disclosure is that the occurrence count data is stored in aseparate bitstream from the DocID Delta information. This enables theretrieval of DocID data without retrieving the occurrence data. Thisfurther optimizes the index for use where the DocID alone is sufficient.Document length, also used in some relevance ranking algorithms, is alsonot stored in the Content Index Extension 106, further reducing theamount of stored data.

Referring now to FIG. 7, DocIDs are stored within the DocID Bitstream708 as a series of symbols generated by the Huffman encoding algorithm.The first step is to convert each DocID into a step size (or delta) fromthe previous DocID. This DocID Delta is the numerical difference between2 sequential DocIDs. If the current DocID is known, the delta valueenables the next DocID to be calculated. Because the delta is smallerthan the DocID, using the delta reduces the amount of data to be stored.It also maps the list of unique DocIDs into a much smaller finite set ofnumeric values which Huffman compression needs.

To further restrict the number of possible values, all DocID Deltasgreater than a selected DocID Delta Threshold 604 are stored explicitlywithin the DocID Bitstream 708 rather than as an encoded value.Referring to FIG. 9, encoded DocID entries will only have a Symbol Code902. Those DocIDs with a delta value greater than the DocID DeltaThreshold will be represented by a special symbol value and the deltavalue will be stored explicitly in the next field as an un-encoded DocIDDelta 904. An embodiment uses the value of (BSV+DocID Delta Threshold)as the special symbol. This is a modification to the standard Huffmanencoding scheme. It has the advantage of reducing the number of symbolswhich need to be encoded and incurs minimal size penalty. This isbecause in a search domain where a large percentage of the documentscontain the keyword, the DocID Delta values will typically bedistributed across a set of relatively small values. Large delta valueswill occur rarely. In the Huffman encoding scheme this would result inthem being assigned the longest codes. The difference in length betweenthe code which would be used and the delta value itself is relativelysmall so the cost of storing the delta as an un-encoded value isminimal. In some cases, the combined length of the un-encoded delta andassociated special symbol value could actually be smaller than thesymbol that would have been assigned in a standard encoding approach. Afurther embodiment uses two different special symbol values to selecttwo different storage sizes for the explicit DocID Delta value (i.e. twobytes vs. four bytes) to further optimize storage usage.

Referring again to FIG. 7 it can be seen that each Data Page 404 beginswith housekeeping information. In one embodiment this comprises LastDocID 702 which specifies the last document ID stored on this page andNumber of DocIDs Left 704 which specifies the number of document IDsremaining, including those on the current page. These are used innavigating through the Data Pages 404. The next section of the Data Page404 is the Page Directory 706 which is a directory of DocIDs on thecurrent page. For each DocID, there is a Page Directory Entry 800. Anembodiment is shown in FIG. 8. The DocID field 802 identifies thespecific Document ID to which the entry applies. The DocID Cnt field 804specifies number of DocIDs in the page prior to the current DocID. TheDocID Offset field 806 specifies the offset in bits from the beginningof the DocID Bitstream 708 to the location of the encoded DocID entrywithin the DocID Bitstream 708. The OccurCnt Offset field 808 specifiesthe offset in bits from the beginning of the OccurCnt Bitstream 710 tothe location of the OccurCnt entry within the OccurCnt Bitstream 710.These values enable direct access to the information for a selectedDocID within the Data Page 404 where it is not desirable to traverse thelist in order to find the information.

Compression Overview

Generating the compressed data for the content index extension 106involves two separate high level processes: generating the encodingdata; and encoding each entry. Each of these is repeated for eachkeyword to be listed in the content index extension 106. One approach isdescribed below and illustrated in FIG. 10.

Generate Encoding Data

The first step in generating the encoding data is to determine the listof documents 1002 in the search domain which contain the keyword. Foreach document, the DocID Delta and OccurCnt values are determined 1004along with the Bits In Occurrence value needed to hold the OccurCnt. Thefull set of these values, across all relevant documents, is stored in asingle document list. Using this list, the DocID Delta Threshold valueto be used for the Categories is determined based on the DocID Deltavalues.

With the information from the document list available, the Categoriescan be defined 1006 and Category Descriptors 502 specified. For eachCategory, the Symbol Count 602 is defined as one less than the DocIDDelta Threshold value. The Symbol Count 602 and DocID Delta Threshold604 values are common across all Categories. Each Category is assigned adifferent value for the Bits In Occurrence field 606 selectedsequentially from the predefined set of values. Each Category is thenassigned a different Base Symbol Vale (BSV) 608 starting at zero (0) andincrementing by Symbol Count 602 for each subsequent Category.

With the Categories defined, the full set of Symbols, spanning allCategories, is specified 1008. Each Symbol is calculated as the BSV forthe Category plus the appropriate DocID Delta value. Huffman encoding isthen used to generate a distinct Code for each Symbol 1010, utilizingfrequency information derived from the document list. The number oftimes that each unique pair of DocID Delta and Bits In Occurrence occursin the list is an input to the encoding process with the more frequentlyused pairs being given shorter Codes. These Codes are combined to createthe Encoding Table 504 in the format discussed above. The combined setof Category Descriptors 502 and the Encoding Table 504 can then bewritten 1012 to the content index extension 106 as the Compression TablePage 402 for the keyword.

Encode Data for Each Document

With the encoding data available, each of the DocID Delta/OccurCnt pairsin the document list can be encoded. For each document in the list 1014,the associated Bits In Occurrence value 606 is used to determine inwhich Category the data will be encoded 1016. The BSV 608 for theCategory is added to the DocID Delta to determine the Symbol 1018. ThisSymbol is mapped to its associated Code using the Encoding Table 1020,and the Code appended 1022 to the end of the DocID Bitstream 708. IfBits In Occurrence is non-zero, the OccurCnt is appended 1026 to the endof the OccurCnt Bitstream 710 in that number of bits.

For the special case 1024 where the DocID Delta is greater than theDocID Delta Threshold 604, a code corresponding to a special symbol willbe used from step 1020 and the DocID Delta will be written 1026 to theDocID Bitstream 708 immediately following the encoded symbol as shown inFIG. 9.

When sufficient data has been accumulated in step 1028 in the DocIDBitstream 708 and OccurCnt Bitstream 710 to fill a Data Page 404 theheader information comprising Last DocID 702, Number of DocIDs Left 704,and Page Directory 706 are generated and the complete Data Page written1030 to the content index extension 106 in the format shown in FIG. 7and a new Data Page 404 started. This continues until all documentinformation has been encoded and written to the content index extension106, including writing 1032 the last, possibly partial, data page.Processing then moves to the next keyword to be inserted into thecontent index extension 106.

Decompression Overview

In a similar manner to compression, decompression involves two majorprocesses: generating the decoding information; and then decoding theinformation for each document. Typically this is done for individualkeywords, those specified in a query, rather than for the entire keywordlist at once. One approach is described below and illustrated in FIG.11.

Generate Decoding Table

The Encoding Table 504 stored in the Compression Table Page 402 isconverted into a decoding table 1102 by reference to the CategoryDescriptors 502. Because the Codes in the Encoding Table 504 are storedin the same order as the Symbols appear in the Categories, the Code toSymbol mapping can be recreated as a Decoding Table by enumerating theSymbols and matching them to Codes in the sequence that they are storedin the Encoding Table 504.

Decode Data For Each Document

For each document 1104, the Code is read 1106 from the DocID Bitstream708 and mapped to a Symbol 1108 using the Decoding Table. Comparing theSymbol to the BSVs for the Category Descriptors 502 allows the correctCategory to be determined 1110. This determines the Bits In Occurrence606 value to be used. The symbol is checked 1112 to determine if it is anormal Symbol or a special Symbol. If it is normal, the DocID Delta iscalculated 1114. Subtracting the BSV 608 for the Category from theSymbol generates the corresponding DocID Delta value. Adding the DocIDDelta to the previously processed DocID generates the current DocID. Ifthe OccurCnt is needed, it can be read 1118 from the OccurCnt Bitstream710 using the Bits In Occurrence 606 value.

In the special case where the Code read from the DocID Bitstream 708maps to the special symbol indicating a DocID Delta which exceeds theDocID Delta Threshold 604, the DocID Delta value is read 1116 from theDocID Bitstream 708 immediately following the Code. After step 1118 flowreturns to step 1104.

In one embodiment, two modes of access to the bit streams are supported.Sequential access is available by starting at the beginning of eachbitstream and maintaining a pointer to the current position in each. Thepointer for the DocID Bitstream 708 advances a single bit at a time aseach Code is read. Because Huffman encoding uses prefix free codes, thecodes vary in length and can be recognized by their bit sequence. Thismeans that a Code could be recognized with any bit read. The pointer forthe OccurCnt Bitstream 710 increments by the Bits In Occurrence valuecorresponding to the Symbol. Direct access is also available via thePage Directory 706. The directory can be searched to find the PageDirectory Entry 800 containing the DocID field 802 corresponding to thedocument being accessed. The DocID Offset 804 supplies an offset intothe DocID Bitstream 708 and the OccurCnt Offset 808 supplies an offsetinto the OccurCnt Bitstream 710. The data for document being accessedcan then be retrieved or sequential access can start from that point.

Although the subject matter has been described in language specific tostructural features and/or methodological acts, it is to be understoodthat the subject matter defined in the appended claims is notnecessarily limited to the specific features or acts described above.Rather, the specific features and acts described above are disclosed asexample forms of implementing the claims. It will be understood by thoseskilled in the art that many changes in construction and widelydiffering embodiments and applications will suggest themselves withoutdeparting from the scope of the disclosed subject matter.

1.-20. (canceled)
 21. A computer system comprising at least oneprocessor and at least one memory, the at least one memory storingcomputer-readable instructions that when executed by the at least oneprocessor cause the computer system to perform a method of searching aplurality of documents within a search domain, the method comprising:determining the plurality of documents within the search domain containa keyword; determining a keyword occurrence count entry corresponding tothe number of times the keyword occurs in each document of the pluralityof documents; providing a compressed document ID delta list having aseries of document ID delta entries, one for each of the plurality ofdocuments that contains the keyword; providing an occurrence count listhaving a series of keyword occurrence count entries, one for each of theplurality of documents that contains the keyword; associating eachkeyword occurrence count entry with one of a finite set of categories,wherein each category has an occurrence entry size, wherein each keywordoccurrence count entry is of a size substantially equal to theoccurrence entry size for the associated category, wherein each categorycomprises a category base value, and wherein each of the series ofdocument ID delta entries is represented by a symbol that is a sum of acategory base value for the associated category and an associateddocument ID delta entry; providing an encoding table for compressing thedocument ID delta list, the encoding table having a code correspondingto each symbol, wherein a code ordering corresponds to an order ofsymbols in the finite set of categories, and wherein each symbol iscalculated based on the code ordering; and searching the plurality ofdocuments using the encoding table.
 22. The computer system of claim 21,wherein one category has an occurrence entry size that indicates thatthe keyword occurrence count entry is not stored in the occurrence countlist.
 23. The computer system of claim 21, wherein the symbols form asingle continuous series across all categories in the finite set ofcategories.
 24. The computer system of claim 21, further comprising:representing the document ID delta list using a single set of documentID delta values that are repeated for each category of the finite set ofcategories, and wherein a different symbol represents each document IDdelta value for each category of the finite set of categories.
 25. Thecomputer system of claim 21, further comprising: compressing thedocument ID delta list using Huffman encoding modified by specifying anupper threshold on a size of document ID delta entries; not encodingdocument ID delta entries that are larger than the upper threshold; andexplicitly storing document ID delta entries that are larger than theupper threshold in the document ID delta list.
 26. The computer systemof claim 25, wherein document ID delta entries that are larger than theupper threshold are associated with a special symbol.
 27. The computersystem of claim 21, further comprising: wherein the compressed documentID delta list identifies a set of documents based on a plurality ofkeywords, searching the set of documents by using the compresseddocument ID delta list to identify a subset of documents containing agiven keyword and using the occurrence count list to identify a numberof times that the given keyword occurs in each document of the subset ofdocuments.
 28. A computing system storing computer-readable instructionsthat when executed cause the computing system to: use an index toidentify those documents containing the keyword, the index having anencoded document ID delta list, the document ID delta list having aplurality of entries, each entry using a symbol to represent a documentID delta value for each of the plurality of documents in the searchdomain that contains the keyword; associate each of the symbols in thedocument ID delta list with one of a finite set of categories and withan order within each of the finite set of categories, wherein eachcategory comprises a category base value and each symbol in the documentID delta list is a sum of the category base value and the document IDdelta value that the symbol represents; and encode the document ID deltalist using an encoding table, a code ordering in the encoding tablecorresponding to an order of symbols in the finite set of categories,wherein each symbol corresponds to a code in the encoding table, andwherein each symbol is calculated based on the code ordering.
 29. Thecomputing system of claim 28, the computer-readable instructions furthercausing the computing system to: represent the document ID delta listusing a single set of document ID delta values that are repeated foreach category of the finite set of categories, and wherein a differentsymbol represents each document ID delta value for each category of thefinite set of categories.
 30. The computing system of claim 28, thecomputer-readable instructions further causing the computing system to:encode the document ID delta list using Huffman encoding modified byspecifying an upper threshold on document ID delta size; not encodedocument ID delta values that are larger than the upper threshold; andexplicitly store document ID delta values that are larger than the upperthreshold in the document ID delta list.
 31. The computing system ofclaim 30, wherein document ID delta values that are larger than theupper threshold are associated with a special symbol.
 32. The computingsystem of claim 28, the computer-readable instructions further causingthe computing system to: provide an occurrence count list having aseries of keyword occurrence count entries, one for each of theplurality of documents that contains the keyword, wherein the occurrencecount list comprises a series of contiguous variable length occurrencecount entries, wherein a size of each occurrence count entry is selectedfrom a finite set of fixed values.
 33. The computing system of claim 32,the computer-readable instructions further causing the computing systemto: associate each occurrence count entry with one of the finite set ofcategories, wherein each category is associated with an occurrence entrysize, wherein each occurrence count entry is of a size substantiallyequal to the occurrence entry size for the associated category.
 34. Thecomputing system of claim 33, wherein one category has an occurrenceentry size that indicates that an occurrence count entry is not storedin the occurrence count list.
 35. A computer storage medium storinginstructions for performing a method of searching for a keywordoccurring in a plurality of documents within a search domain, theinstructions when executed causing a computer system to: use an index toidentify those documents containing the keyword, the index having anencoded document ID delta list, the encoded document ID delta listhaving a plurality of entries, each entry using a symbol to represent adocument ID delta value for each of the plurality of documents in thesearch domain that contains the keyword; associate each of the symbolsin the encoded document ID delta list with one of a finite set ofcategories and with an order within each of the finite set ofcategories, wherein each category comprises a category base value andeach symbol in the encoded document ID delta list is a sum of thecategory base value and the document ID delta value that the symbolrepresents; and encode the document ID delta list using an encodingtable, a code ordering in the encoding table corresponding to an orderof symbols in the finite set of categories, wherein each symbolcorresponds to a code in the encoding table, and wherein each symbol iscalculated based on the code ordering.
 36. The computer storage mediumof claim 35, the instructions further causing the computer system to:represent the document ID delta list using a single set of document IDdelta values that are repeated for each category of the finite set ofcategories, and wherein a different symbol represents each document IDdelta value for each category of the finite set of categories.
 37. Thecomputer storage medium of claim 35, the instructions further causingthe computer system to: encode the document ID delta list using Huffmanencoding modified by specifying an upper threshold on document ID deltasize; not encode document ID delta values that are larger than the upperthreshold; and explicitly store document ID delta values that are largerthan the upper threshold in the document ID delta list.
 38. The computerstorage medium of claim 37, wherein document ID delta values that arelarger than the upper threshold are associated with a special symbol.39. The computer storage medium of claim 35, the instructions furthercausing the computer system to: provide an occurrence count list havinga series of keyword occurrence count entries, one for each of theplurality of documents that contains the keyword, wherein the occurrencecount list comprises a series of contiguous variable length occurrencecount entries, wherein a size of each occurrence count entry is selectedfrom a finite set of fixed values.
 40. The computer storage medium ofclaim 39, the instructions further causing the computer system to:associate each occurrence count entry with one of the finite set ofcategories, wherein each category is associated with an occurrence entrysize, wherein each occurrence count entry is of a size substantiallyequal to the occurrence entry size for the associated category.